package com.walming.generator.copycat.mybatisplus.mapper;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;

import java.io.Serializable;
import java.util.Collection;

/**
 * BaseMapper
 *
 * @author walming
 * @date 2021-03-09 9:52
 */
public interface BaseMapper<T> extends com.baomidou.mybatisplus.core.mapper.BaseMapper<T> {

    /**
     * 根据 entity 条件，删除记录<br>
     * 此方法慎用，绝对物理删除，不受逻辑标识影响
     *
     * @param wrapper – 实体对象封装操作类（可以为 null）
     * @return 执行影响行数
     */
    int deletePhysical(@Param(Constants.WRAPPER) Wrapper<T> wrapper);

    /**
     * 根据 ID 删除 <br>
     * 此方法慎用，绝对物理删除，不受逻辑标识影响
     *
     * @param id 主键ID
     * @return 执行影响行数
     */
    int deletePhysicalById(@Param("id") Serializable id);

    /**
     * 删除（根据ID 批量删除）<br>
     * 此方法慎用，绝对物理删除，不受逻辑标识影响
     *
     * @param idList 主键ID列表(不能为 null 以及 empty)
     * @return 执行影响行数
     */
    int deletePhysicalBatchByIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);

}
